home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / pao / towns / cdplay / src / critical.asm < prev    next >
Assembly Source File  |  1991-10-18  |  3KB  |  113 lines

  1. ;==============================================================================
  2. ;    << 386ASM V2.0 >>  for  FM TOWNS
  3. ;==============================================================================
  4. .386p
  5.         PAGE        60,132
  6.         NAME        CRITICAL
  7.         TITLE        CRITICAL ERROR Interrupt
  8. ;==============================================================================
  9. ;    致命的エラー処理(CTRL+Cマスク処理)
  10. ;
  11. ;    CREATE : 1990.06.01
  12. ;    FINISH : 1990.06.02
  13. ;
  14. ;    < High C からの呼出形式 >
  15. ;    extern    INT24_mask() ;
  16. ;    INT24_mask() ;
  17. ;
  18. ;    < note > : TABS = 4
  19. ;
  20. ;    < History >
  21. ;    1990.06.01 : CREATE
  22. ;    1991.06.07 : 清書
  23. ;
  24. ;    Programmed by Y.Hirata ( Nifty-ID : NAB03321 )
  25. ;==============================================================================
  26. ;
  27. INCLUDE    hc.inc                                ;
  28. ;
  29. CGROUP    GROUP pmcode, CODE                    ;
  30. ;
  31. ;--------------------------------------------
  32.         public    INT24_mask                    ; 致命的エラー割り込み登録
  33. ;--------------------------------------------
  34. ;
  35. DOSERROR_IGNORE    EQU        0                    ; 無視
  36. DOSERROR_RETRY    EQU        1                    ; 再試行
  37. DOSERROR_ABORT    EQU        2                    ; プログラム中止
  38. DOSERROR_FAIL    EQU        3                    ; ファンクションコール失敗
  39. ;
  40. ;////////////////////////////////////////////
  41. ;            ネイティブ部
  42. ;////////////////////////////////////////////
  43. ;
  44. ;********************************************
  45. ;    致命的エラーハンドラ/ネイティブ処理
  46. ;********************************************
  47. ;
  48. pmcode    SEGMENT                                ;
  49.         ASSUME    cs:CGROUP                    ;
  50. ;
  51. ;--------------------------------------------
  52. ;    致命的エラーネイティブハンドラ
  53. ;--------------------------------------------
  54.         ALIGN    4                            ; dword boundary
  55. INT24_hook    PROC    FAR                        ;
  56.             cli                                ;
  57.             mov        al,DOSERROR_FAIL        ; ファンクションコール失敗としてリターン
  58.             iretd                            ; 割り込み復帰
  59. INT24_hook    ENDP                            ;
  60. ;
  61. ;--------------------------------------------
  62. ;    CTRL+C ネイティブハンドラ
  63. ;--------------------------------------------
  64.         ALIGN    4                            ; dword boundary
  65. INT23_hook    PROC    FAR                        ;
  66.             iretd                            ;
  67. INT23_hook    ENDP                            ;
  68. ;
  69. ;--------------------------------------------
  70. ;    致命的エラー割り込み登録
  71. ;--------------------------------------------
  72.         ALIGN    4                            ; dword boundary
  73. INT24_mask    PROC    NEAR                    ;
  74.             push    ebp                        ;
  75.             mov        ebp,esp                    ; スタックフレーム形成
  76. ;
  77.             push    ds                        ;
  78.             push    es                        ;
  79.             push    edx                        ;
  80.             push    ecx                        ;
  81. ;
  82.             push    cs                        ;
  83.             pop        ds                        ; ds = cs
  84. ;
  85.             cli                                ;
  86.             lea        edx,INT23_hook            ;
  87.             mov        cl,23h                    ; CTRL+Cの割り込み番号
  88.             mov        ax,2506h                ; ネイティブハンドラの登録
  89.             sti                                ;
  90.             int        INT_DOS                    ;
  91. ;
  92.             cli                                ;
  93.             lea        edx,INT24_hook            ;
  94.             mov        cl,24h                    ; 致命的エラーの割り込み番号
  95.             mov        ax,2506h                ; ネイティブハンドラの登録
  96.             sti                                ;
  97.             int        INT_DOS                    ;
  98. ;
  99.             pop        ecx                        ;
  100.             pop        edx                        ;
  101.             pop        es                        ;
  102.             pop        ds                        ;
  103.             xor        eax,eax                    ; return code = 0
  104. ;
  105.             pop        ebp                        ; スタックフレーム開放
  106.             ret                                ;
  107. INT24_mask    ENDP                            ;
  108. ;
  109. pmcode        ENDS                            ;
  110. ;
  111.         END
  112.  
  113.